<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>If var [not] in/contains value1,value2,...</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link href="../css/default.css" rel="stylesheet" type="text/css">
</head>
<body>

<h1>If var [not] in value1,value2,...<br>
If var [not] contains value1,value2,...</h1>

<p>检查 <a href="../Variables.htm">变量的</a> 内容是否匹配列表中的某项.</p>

<pre class="Syntax">if <i>Var</i> in <i>MatchList</i>
if <i>Var</i> not in <i>MatchList<br>
</i>if <i>Var</i> contains <i>MatchList</i>
if <i>Var</i> not contains <i>MatchList</i></pre>
<h3>参数</h3>
<table class="info">
  <tr> 
    <td width="15%">Var</td>
    <td width="85%">需要被检查的 <a href="../Variables.htm">变量</a> 名称. 对于 "in" 运算符, 需要准确匹配列表中的某项. 对于 "contains" 运算符, 会更容易形成匹配: 只要列表中的某项作为子字符串包含于 <em>Var</em> 中.</td>
  </tr>
  <tr>
    <td>MatchList</td>
    <td><p>逗号分隔的字符串列表, 其中的每个字符串都将与 <em>Var</em> 的内容进行比较以寻找匹配. <strong>在分隔逗号周围的任何空格或 tab 都是有意义的</strong>, 表示它们也是匹配字符串的一部分. 例如, 如果 <em>MatchList</em> 被设置为 <em>ABC , XYZ</em>, 这时 <em>Var</em> 必须包含带有尾随空格的 ABC 或带有前导空格的 XYZ 才形成匹配.</p>
      <p>在匹配列表中两个连续的逗号产生单个文字逗号. 例如, 后面的匹配列表会在 string1 的末尾产生单个文字逗号: <em>If Var In string1,,,string2</em>. 同样地, 后面的匹配列表仅包含其中含有一个文字逗号的单个项目: <em>If Var In single,,item</em>. 要在列表中包含空的项目, 那么像这个例子那样把逗号作为首个字符: <em>If Var In ,string1,string2</em> (用于 "contains" 运算符时, 由于在所有字符串中都可以找到空项, 所以空项将总是会形成匹配).</p>
      <p>因为 <em>MatchList</em> 中的每一项并不是作为独立的参数, 所以此列表可以完整的包含在一个变量中. 事实上, 如果此列表的长度超过 16383, 那么列表的全部或部分必须包含在变量中以变量表示, 因为这个长度是任何脚本行的最大长度. 例如, <em>MatchList</em> 可以由 of %List1%,%List2%,%List3%, 其中的每个子列表包含了用来匹配词组的一个大的列表.</p>
      <p>列表中任何长度超过 16384 字符的单个项目, 超出长度的那些字符将被视为一个新列表项. 因此, 通常最好避免包含这样的项目.</p></td>
  </tr>
</table>

<h3>备注</h3>
<p>比较总是按字母顺序进行, 而不是作为数字. 例如, 字符串 "11" 不会匹配列表项 "11.0".</p>
<p>除了支持搜索多个字符串 (其中任何一个都将形成匹配) 外, "contains" 运算符的作用与 <a href="IfInString.htm">IfInString/IfNotInString</a> 相同.</p>
<p>可以使用 <a href="StringCaseSense.htm"><em>"StringCaseSense</em></a><em> On</em>" 来设置在比较时区分大小写.</p>
<p>如果 <em>MatchList</em> 较长, 可以通过 <a href="../Scripts.htm#continuation">延续片段</a> 的方法将其分解成较短的几行, 这样可以增加可读性和可维护性.</p>
<p><strong>运算符 "between", "is", "in" 和 "contains" 不支持用于 <a href="../Variables.htm#Expressions">表达式</a> 中.</strong></p>
<h3>相关</h3>
<p><a href="IfBetween.htm">if var between</a>, <a href="IfEqual.htm">IfEqual/Greater/Less</a>, <a href="IfInString.htm">IfInString</a>, <a href="StringCaseSense.htm">StringCaseSense</a>, <a href="Block.htm"> 区块</a>, <a href="Else.htm">Else</a></p>
<h3>示例</h3>
<pre class="NoIndent">if var in exe,bat,com
    MsgBox The file extension is an executable type.

if var in 1,2,3,5,7,11 <em>; 避免在列表中添加了空格.</em>
    MsgBox %var% is a small prime number.

if var contains 1,3  <em>; 注意这里把值作为字符串而不是数字进行比较.</em>
    MsgBox Var contains the digit 1 or 3 (Var could be 1, 3, 10, 21, 23, etc.)

if var in %MyItemList%
    MsgBox %var% is in the list.

InputBox, UserInput, Enter YES or NO
if UserInput not in yes,no
    MsgBox Your input is not valid.

WinGetTitle, active_title, A
if active_title contains Address List.txt,Customer List.txt
    MsgBox One of the desired windows is active.
if active_title not contains metapad,Notepad
    MsgBox But the file is not open in either Metapad or Notepad.</pre>

</body>
</html>
